home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.javadoc;
-
- import java.io.PrintStream;
- import java.util.Date;
- import java.util.Vector;
-
- public class MIFPrintStream {
- PrintStream out;
- public static final int STATE_OUTER = 0;
- public static final int STATE_PARAGRAPH = 1;
- public static final int STATE_LINE = 2;
- public static final int STATE_STRING = 3;
- public static final char hardReturnChar = '\t';
- public static final char hardSpaceChar = '\u0011';
- public static final int MIF_VERSION = 5;
- int state;
- Vector pendingMarks;
- int currentStringLength;
- static Date today = new Date();
- static final int MarkerHF1 = 0;
- static final int MarkerHF2 = 1;
- static final int MarkerIndex = 2;
- static final int MarkerComment = 3;
- static final int MarkerSubject = 4;
- static final int MarkerAuthor = 5;
- static final int MarkerGlossary = 6;
- static final int MarkerEquation = 7;
- static final int MarkerHypertext = 8;
- static final int MarkerXRef = 9;
- static final int MarkerCondText = 10;
- static final int BOLD = 1;
- static final int ITALIC = 2;
- static final int UNDERLINE = 4;
- static final int SMALLCAPS = 8;
- static final int TTY = 16;
- boolean isFormatted;
- boolean lastSpace;
- int currentFont;
- int desiredFont;
- String currentType;
-
- public MIFPrintStream(PrintStream var1, String var2, int var3) {
- this.out = var1;
- var1.println("<MIFFile " + 5 + ".00>");
- var1.println("<Comment Generated by javadoc on " + today + ">");
- if (var2 != null) {
- this.include(var2);
- }
-
- var1.println("<TextFlow <TFTag `A'> <TFAutoConnect Yes> <TextRectID " + var3 + ">");
- this.state = 0;
- }
-
- public MIFPrintStream println(Object var1) {
- this.out.println(var1.toString());
- return this;
- }
-
- public MIFPrintStream newParagraph(String var1) {
- this.topLevel();
- this.out.println("<Para");
- if (var1 != null) {
- this.out.println(" <PgfTag `" + var1 + "'>");
- }
-
- this.state = 1;
- return this;
- }
-
- public MIFPrintStream newParaLine() {
- this.inParagraph();
- this.out.println(" <ParaLine");
- this.state = 2;
- return this;
- }
-
- public MIFPrintStream newString(String var1) {
- this.inParaLine();
- this.out.print(" <" + var1 + " `");
- this.state = 3;
- this.currentStringLength = 0;
- return this;
- }
-
- public MIFPrintStream topLevel() {
- if (this.state > 0) {
- this.inParagraph();
- this.out.println("> # end paragraph");
- }
-
- this.state = 0;
- return this;
- }
-
- public MIFPrintStream inParagraph() {
- if (this.state < 1) {
- throw new RuntimeException("Bad call to inParagraph");
- } else {
- if (this.state > 1) {
- this.inParaLine();
- this.out.println(" >");
- this.state = 1;
- }
-
- return this;
- }
- }
-
- public MIFPrintStream inParaLine() {
- if (this.state < 2) {
- return this.newParaLine();
- } else {
- if (this.state > 2) {
- this.inString();
- this.out.println("'>");
- this.state = 2;
- }
-
- return this;
- }
- }
-
- public MIFPrintStream inString() {
- return this.state < 3 ? this.newString("String") : this;
- }
-
- public MIFPrintStream indent(double var1, double var3, double var5) {
- this.inParagraph();
- this.out.println(" <PgfFIndent " + var1 + "in>");
- this.out.println(" <PgfLIndent " + var3 + "in>");
- this.out.println(" <PgfRIndent " + var5 + "in>");
- return this;
- }
-
- MIFPrintStream skip(int var1) {
- this.inParagraph();
- this.out.println(" <PgfSpBefore " + var1 + "pt>");
- return this;
- }
-
- MIFPrintStream bold(Object var1) {
- this.inParaLine();
- this.out.println(" <Font <FTag `'> <FWeight `Bold'> >");
- this.literal(var1);
- this.inParaLine();
- this.out.println(" <Font <FTag `'> >");
- return this;
- }
-
- MIFPrintStream italic(Object var1) {
- this.inParaLine();
- this.out.println(" <Font <FTag `'> <FAngle `Italic'> >");
- this.literal(var1);
- this.inParaLine();
- this.out.println(" <Font <FTag `'> >");
- return this;
- }
-
- MIFPrintStream tty(Object var1) {
- this.inParaLine();
- this.out.println(" <Font <FTag `'> <FFamily `Courier'> >");
- this.literal(var1);
- this.inParaLine();
- this.out.println(" <Font <FTag `'> >");
- return this;
- }
-
- MIFPrintStream charTag(String var1, Object var2) {
- this.inParaLine();
- this.out.println(" <Font <FTag `" + var1 + "'> >");
- this.literal(var2);
- this.inParaLine();
- this.out.println(" <Font <FTag `'> >");
- return this;
- }
-
- public MIFPrintStream literal(Object var1) {
- String var2 = var1.toString();
- int var3 = var2.length();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- this.literal(var2.charAt(var4));
- }
-
- return this;
- }
-
- public MIFPrintStream literal(char var1) {
- this.inString();
- ++this.currentStringLength;
- switch (var1) {
- case '\t':
- this.out.print("\\t");
- ++this.currentStringLength;
- break;
- case '\n':
- this.out.print("\\n");
- this.inParagraph();
- break;
- case ' ':
- this.out.print(' ');
- if (this.currentStringLength >= 55) {
- this.inParaLine();
- }
- break;
- case '\'':
- this.out.print("\\q");
- ++this.currentStringLength;
- break;
- case '>':
- this.out.print("\\>");
- ++this.currentStringLength;
- break;
- case '\\':
- this.out.print("\\\\");
- ++this.currentStringLength;
- break;
- case '`':
- this.out.print("\\Q");
- ++this.currentStringLength;
- break;
- default:
- if (var1 >= ' ' && var1 < 128) {
- this.out.print(var1);
- } else {
- this.currentStringLength += 4;
- this.out.print("\\x" + Character.forDigit(var1 >> 4 & 15, 16) + Character.forDigit(var1 & 15, 16) + ' ');
- }
- }
-
- return this;
- }
-
- private void markInternal(int var1, Object var2) {
- if (this.state == 0) {
- if (this.pendingMarks == null) {
- this.pendingMarks = new Vector();
- }
-
- this.pendingMarks.addElement(new Integer(var1));
- this.pendingMarks.addElement(var2);
- } else {
- this.inParaLine();
- this.out.println(" <Marker <MType " + var1 + "> <MText `" + var2 + "'> >");
- }
- }
-
- public MIFPrintStream mark(int var1, Object var2) {
- this.markInternal(var1, this.literalText(var2.toString(), false));
- return this;
- }
-
- public MIFPrintStream markReference(Object var1) {
- this.markInternal(9, this.literalText(var1.toString(), false));
- return this;
- }
-
- public MIFPrintStream index(Object var1, String var2) {
- this.markInternal(2, this.literalText(var1.toString(), true) + '[' + this.literalText(var2.toString(), true) + ']');
- return this;
- }
-
- public MIFPrintStream index(Object var1) {
- this.markInternal(2, this.literalText(var1.toString(), true));
- return this;
- }
-
- private String literalText(String var1, boolean var2) {
- int var3 = var1.length();
- StringBuffer var4 = new StringBuffer();
-
- for(int var5 = 0; var5 < var3; ++var5) {
- char var6 = var1.charAt(var5);
- switch (var6) {
- case '\'':
- var4.append("\\q");
- break;
- case '>':
- var4.append("\\>");
- break;
- case '[':
- case ']':
- if (var2) {
- var4.append("\\\\");
- }
-
- var4.append(var6);
- break;
- case '\\':
- var4.append("\\\\");
- break;
- case '`':
- var4.append("\\Q");
- break;
- default:
- if (var6 >= ' ' && var6 < 128) {
- var4.append(var6);
- } else {
- var4.append("\\x" + Character.forDigit(var6 >> 4 & 15, 16) + Character.forDigit(var6 & 15, 16) + ' ');
- }
- }
- }
-
- return var4.toString();
- }
-
- public MIFPrintStream emitPendingMarks() {
- if (this.pendingMarks != null) {
- for(int var1 = 0; var1 < this.pendingMarks.size(); var1 += 2) {
- int var2 = ((Number)this.pendingMarks.elementAt(var1)).intValue();
- String var3 = (String)this.pendingMarks.elementAt(var1 + 1);
- this.mark(var2, var3);
- }
- }
-
- this.pendingMarks = null;
- return this;
- }
-
- public MIFPrintStream XRef(String var1, String var2, String var3) {
- String var4 = this.literalText(var2, false);
- String var5 = var3 == null ? "" : this.literalText("<c>" + var3, false);
- this.inParaLine();
- this.out.println(" <XRef <XRefName `" + var1 + "'>");
- this.out.println(" <XRefSrcText `" + var4 + "'>");
- this.out.println(" <XRefSrcFile `" + var5 + "'>");
- this.out.println(" > #XRef");
- this.out.println(" <String `page\\x11 XX\u0015XX'>");
- this.out.println(" <XRefEnd>");
- return this;
- }
-
- public MIFPrintStream close() {
- this.topLevel();
- this.out.println("> #end TextFlow");
- this.out.println("# end of MIF");
- this.out.close();
- return null;
- }
-
- MIFPrintStream html(String var1, String var2) {
- int[] var3 = new int[30];
- int var4 = 0;
- this.newParagraph(var1);
- this.currentFont = this.desiredFont = 0;
- this.isFormatted = false;
- this.lastSpace = true;
- this.currentType = var1;
-
- for(int var5 = 0; var5 < var2.length(); ++var5) {
- char var6 = var2.charAt(var5);
- String var7 = null;
- switch (var6) {
- case '\t':
- case '\n':
- case ' ':
- if (this.isFormatted) {
- this.htmlLiteral(var6 == ' ' ? '\u0011' : var6);
- } else if (!this.lastSpace) {
- this.htmlLiteral(' ');
- }
- break;
- case '&':
- if (var2.startsWith("gt;", var5 + 1)) {
- this.htmlLiteral('>');
- var5 += 3;
- } else if (var2.startsWith("lt;", var5 + 1)) {
- this.htmlLiteral('<');
- var5 += 3;
- } else if (var2.startsWith("amp;", var5 + 1)) {
- this.htmlLiteral('&');
- var5 += 4;
- } else if (var2.startsWith("quot;", var5 + 1)) {
- this.htmlLiteral('"');
- var5 += 5;
- } else if (var2.startsWith("reg;", var5 + 1)) {
- this.htmlLiteral('¨');
- var5 += 4;
- } else if (var2.startsWith("copy;", var5 + 1)) {
- this.htmlLiteral('©');
- var5 += 5;
- } else {
- this.htmlLiteral('&');
- }
- break;
- case '<':
- int var8 = var2.indexOf(62, var5 + 1);
- if (var8 <= var5 + 1) {
- this.htmlLiteral('<');
- } else {
- var7 = var2.substring(var5 + 1, var8);
- char var9 = var7.charAt(0);
- if (var9 != '/' && Character.digit(var9, 36) == -1) {
- this.htmlLiteral('<');
- var7 = null;
- } else {
- var5 = var8;
- }
- }
- break;
- default:
- this.htmlLiteral(var6);
- }
-
- if (var7 != null) {
- if (!var7.equalsIgnoreCase("tt") && !var7.equalsIgnoreCase("code")) {
- if (!var7.equalsIgnoreCase("cite") && !var7.equalsIgnoreCase("em") && !var7.equalsIgnoreCase("i")) {
- if (var7.equalsIgnoreCase("b")) {
- var3[var4++] = this.currentFont;
- this.desiredFont = this.currentFont | 1;
- } else if (var7.equalsIgnoreCase("strong")) {
- var3[var4++] = this.currentFont;
- this.desiredFont = this.currentFont | 1 | 8;
- } else if (!var7.equalsIgnoreCase("/tt") && !var7.equalsIgnoreCase("/code") && !var7.equalsIgnoreCase("/cite") && !var7.equalsIgnoreCase("/em") && !var7.equalsIgnoreCase("/i") && !var7.equalsIgnoreCase("/b") && !var7.equalsIgnoreCase("/strong")) {
- if (var7.equalsIgnoreCase("pre")) {
- this.topLevel();
- ++var4;
- var3[var4] = this.currentFont;
- this.topLevel();
- this.desiredFont = this.currentFont | 16;
- this.isFormatted = true;
- } else if (var7.equalsIgnoreCase("/pre")) {
- this.topLevel();
- --var4;
- this.desiredFont = var3[var4];
- this.isFormatted = false;
- } else if (!var7.equalsIgnoreCase("p") && !var7.equalsIgnoreCase("par")) {
- if (!var7.startsWith("a ") && !var7.startsWith("A ") && !var7.equalsIgnoreCase("/a")) {
- if (var7.indexOf("@") > 0 && var7.indexOf(32) == -1) {
- this.htmlLiteral('<');
- var5 -= var7.length();
- } else {
- System.out.println("Unknown html <" + var7 + ">");
- }
- }
- } else {
- this.topLevel();
- }
- } else if (var4 == 0) {
- System.out.println("Font stack underflow");
- this.desiredFont = 0;
- } else {
- --var4;
- this.desiredFont = var3[var4];
- }
- } else {
- ++var4;
- var3[var4] = this.currentFont;
- this.desiredFont = this.currentFont | 2;
- }
- } else {
- var3[var4++] = this.currentFont;
- this.desiredFont = this.currentFont | 16;
- }
- }
- }
-
- return this;
- }
-
- private void htmlLiteral(char var1) {
- if (this.state < 1) {
- this.newParagraph(this.currentType);
- this.out.println(" <PgfSpBefore 6pt>");
- this.currentFont = 0;
- this.lastSpace = true;
- }
-
- if (this.currentFont != this.desiredFont) {
- this.inParagraph();
- this.out.println(" <Font <FTag `'> >");
- this.out.print(" <Font ");
- if ((this.desiredFont & 2) != 0) {
- this.out.print("<FAngle Italic> ");
- }
-
- if ((this.desiredFont & 1) != 0) {
- this.out.print("<FBold Yes> ");
- }
-
- if ((this.desiredFont & 4) != 0) {
- this.out.print("<FUnderlining FSingle> ");
- }
-
- if ((this.desiredFont & 8) != 0) {
- this.out.print("<FCase FSmallCaps> ");
- }
-
- if ((this.desiredFont & 16) != 0) {
- this.out.print("<FFamily Courier> ");
- }
-
- this.out.println(">");
- this.currentFont = this.desiredFont;
- }
-
- this.literal(var1);
- this.lastSpace = var1 <= ' ';
- }
-
- private void include(String var1) {
- this.out.println("include(" + var1 + ")");
- }
-
- public MIFPrintStream importText(String var1) {
- this.newParagraph("Body");
- this.inParaLine();
- this.println(" <TextInset");
- this.println(" <TiSrcFile `" + var1 + "'>");
- this.println("# <TiLastUpdate 0 0>");
- this.println(" <TiAutoUpdate Yes>");
- this.println(" <TiFlow");
- this.println(" <TiMainFlow Yes>");
- this.println(" <TiFormatting TiEnclosing> #TiSource");
- this.println(" <TiFormatRemovePageBreaks No>");
- this.println(" <TiFormatRemoveOverrides No>");
- this.println(" > # end of TiFlow");
- this.println(" > # end of TextInset");
- this.newParagraph("Body");
- this.inParaLine();
- this.println(" <TextInsetEnd>");
- this.topLevel();
- return this;
- }
- }
-